import numpy as np

#定义贪吃蛇的动作
snack_actions = {
    'L': np.array([-1, 0]),
    'R': np.array([1, 0]),
    'U': np.array([0, -1]),
    'D': np.array([0, 1])
}
#定义蛇类
class snackclass(object):
    def __init__(self, map_size, snack_len=4):
        #初始化蛇的位置、运动方向、长度
        self.map_size = map_size
        self.position = np.array([map_size//2, map_size//2])
        self.snack_len = snack_len
        self.act = np.array([1, 0])
        #列表存储蛇的历史位置
        self.history_p = [np.array([map_size//2, map_size//2]).astype('float')]
    #运动函数
    def move(self):
        self.position += self.act
        self.history_p.append(self.position.copy())
        self.history_p = self.history_p[-self.snack_len - 1 :]
    #判断死亡条件：吃到自己或者碰到边界
    def deadcheck(self,pos):
        if pos[0] <= -1 or pos[0] >= self.map_size:
            return True
        elif pos[1] <= -1 or pos[1] >= self.map_size:
            return True
        return False
    #获取蛇运动的合法方向
    def getlegalaction(self):
        L = self.position - snack_actions['L']
        R = self.position + snack_actions['R']
        U = self.position + snack_actions['U']
        D = self.position + snack_actions['D']
        checkpos = [L, R, U, D]
        legacy = [int(self.deadcheck(p)) for p in checkpos]
        return legacy
    #增长
    def __len__(self):
        return self.snack_len + 1